package com.fejal.dao;


import java.util.List;
import com.fejal.bean.Curso;

public class CursoDAOHibernate implements CursoDAO {

	HibernateDAOFactory hibernateDAOFactory = null;
	HibernateDAO<Curso> hibernateDAO = null;

	public CursoDAOHibernate() {
		hibernateDAOFactory = new HibernateDAOFactory();
		hibernateDAO = hibernateDAOFactory.getCursoDao();
	}

	@Override
	public boolean inserir(Curso curso) throws Exception {

		boolean ok = false;

		try {
			hibernateDAO.add(curso);
			ok = true;

		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} 

		return ok;
	}

	@Override
	public boolean alterar(Curso Curso) throws Exception {

		boolean ok = false;

		try {
			hibernateDAO.update(Curso);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} 

		return ok;
	}

	@Override
	public boolean excluir(Curso Curso) throws Exception {

		boolean ok = false;

		try {
			hibernateDAO.remove(Curso);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} 
 
		return ok;
	}

	@Override
	public Curso getCurso(int codigoCurso) {

		Curso curso = hibernateDAO.get(codigoCurso);
		return curso;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Curso> getSelecionar(String descricao,String identificador, int tipoCurso) {		
	
		String 	sql = "FROM Curso WHERE codigoCurso <> 0 ";

		if (!(descricao.isEmpty())) {
			sql += "AND descricao like '" + descricao + "%' ";  
		}
		
		if (!(identificador.isEmpty())) {
			sql += "AND identificador = '" + identificador + "' ";  
		}

		if (tipoCurso != 0) {
			sql += "AND tipoCurso = " + tipoCurso + " ";  
		}

		sql += "ORDER BY descricao";		
 
		List<Curso> lista = hibernateDAO.getSession().createQuery(sql).list();
		return lista;
	}
	
	@Override
	public List<Curso> getListTodos() {
		
		//List<Curso> list = hibernateDAO.listAll();
		//return list;
		return getSelecionar("","",0);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Curso> getListTodos(int tipoCurso) {

		String 	sql = "FROM Curso WHERE tipoCurso = "+tipoCurso;

		sql += "ORDER BY descricao";		

		List<Curso> lista = hibernateDAO.getSession().createQuery(sql).list();
		return lista;
	}

	@SuppressWarnings("unchecked")
	@Override
	public boolean isExiste(Curso curso) {
		// SQL para verificar se a Curso existe
		String 	sql = 	"FROM Curso WHERE codigoCurso <> "+curso.getCodigoCurso()+" AND "+
				 		"  descricao = '"+curso.getDescricao()+"' AND" +
						"  faculdade = '"+curso.getFaculdade().getCodigoFaculdade()+"'AND " +
						"  turno = '"+curso.getTurno()+"'";

		List<Curso> lista = hibernateDAO.getSession().createQuery(sql).list();
		if(lista.size()<1){
			return false;
		} else {
			return true;
		}
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Curso> getSelecionar(int codigoFaculdade) {
		String 	sql = "FROM Curso WHERE codigoCurso <> 0 ";
				sql += "AND codigoFaculdade  = " + codigoFaculdade ;  
		sql += "ORDER BY descricao";		
 
		List<Curso> lista = hibernateDAO.getSession().createQuery(sql).list();
		return lista;
	}
}
